﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using SAP.Middleware.Connector;
using CM.DL.DALC.NC03;
using DECOR.BL.BE;

namespace DECOR.DL.DALC.NC03
{
    public class ParametroDALC : IParametroDALC 
    {
        private string _connId = string.Empty;

        public static ParametroDALC Instance(string pConnId)
        {
            if (_instance == null)
            {
                lock (typeof(ParametroDALC))
                {
                    if (_instance == null)
                    {
                        _instance = new ParametroDALC(pConnId);
                    }
                }
            }
            return _instance;
        }
        private ParametroDALC(string pConnId) { this._connId = pConnId; }
        private ParametroDALC() { }
        private static volatile ParametroDALC _instance = null;

        #region IParametroDALC Members

        public List<DECOR.BL.BE.StockBE> getDataLotes(string pMatnr, decimal pCant, string pCentro, 
            string pAlmacen, string pLote, string pNumPedido, string pPosNr, 
            string pOrgVtas, string pCanalDist)
        {
            string charSep = ParametroDALC.getParamValueStatic("charSep");

            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            DestConfig dc = new DestConfig();
            List<StockBE> lstStockBE = new List<StockBE>();
            StockBE objStockBE = null;
            try
            {
                //try
                //{
                //    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                //}
                //catch { }
                //RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_DATA_LOTES");
                function.SetValue("P_MATNR", pMatnr.PadLeft(18,'0'));
                function.SetValue("P_VKORG", pOrgVtas);
                function.SetValue("P_VTWEG", pCanalDist);
                function.SetValue("P_WERKS", pCentro);
                function.SetValue("P_LGORT", pAlmacen);
                function.SetValue("P_CHARG", pLote);
                function.SetValue("P_ZMENG", pCant);
                function.SetValue("P_VBELN", pNumPedido);
                function.SetValue("P_POSNR", pPosNr);

                function.Invoke(dest);

                IRfcTable LOTES = function.GetTable("T_LOTES");

                foreach (IRfcStructure item in LOTES)
                {
                    if (item["STOCK_DI"].GetDecimal() > 9999999998)
                    {
                        continue;
                    }

                    objStockBE = new StockBE();

                    objStockBE.CodMaterial = item["MATNR"].GetString();
                    objStockBE.DescMaterial = item["MATNOM"].GetString();
                    objStockBE.CodCentro = item["WERKS"].GetString();
                    objStockBE.DescCentro = item["WERNOM"].GetString();
                    objStockBE.CodAlmacen = item["LGORT"].GetString();
                    objStockBE.DescAlmacen = !item["LGORT"].GetString().Equals(string.Empty) ? item["LGORT"].GetString() + " (" + item["LGONOM"].GetString() + ")" : item["LGORT"].GetString();
                    objStockBE.CodLote = item["CHARG"].GetString();
                    objStockBE.StockDisponible = Convert.ToDecimal(item["STOCK_DI"].GetString());
                    objStockBE.ValorCaracteristica = item["ATWRT"].GetString();

                    lstStockBE.Add(objStockBE);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            return lstStockBE;
        }

        public void getDataLotes(string pMatnr, decimal pCant, string pCentro, string pAlmacen, string pLote, string pNumPedido, string pPosNr, string pOrgVtas, string pCanalDist, ref List<DECOR.BL.BE.GenericBE> lstCentro, ref List<DECOR.BL.BE.GenericBE> lstAlmacen, ref List<DECOR.BL.BE.GenericBE> lstLote, ref string pCentroOp, ref string pAlmacenOp, ref string pLoteOp)
        {
            
        }

        public void getDataDDL(ref List<DECOR.BL.BE.GenericBE> lstZipCodes, ref List<DECOR.BL.BE.GenericBE> lstAsesores, 
            ref List<DECOR.BL.BE.GenericBE> lstBloEnt, ref List<DECOR.BL.BE.GenericBE> lstBloFac, 
            ref List<DECOR.BL.BE.GenericBE> lstCondExp, ref List<DECOR.BL.BE.GenericBE> lstGrpCond, 
            ref List<DECOR.BL.BE.GenericBE> lstGrpVend, ref List<DECOR.BL.BE.GenericBE> lstMotPed, 
            ref List<DECOR.BL.BE.GenericBE> lstOfVtas, ref List<DECOR.BL.BE.GenericBE> lstSectores, 
            ref List<DECOR.BL.BE.GenericBE> lstTipoDoc, ref List<DECOR.BL.BE.GenericBE> lstTipoVisita)
        {
            string charSep = ParametroDALC.getParamValueStatic("charSep");

            //------------------------------------------------------------------
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            DestConfig dc = new DestConfig();
            lstOfVtas = new List<GenericBE>();
            lstZipCodes = new List<GenericBE>();
            lstTipoDoc = new List<GenericBE>();
            lstGrpVend = new List<GenericBE>();
            lstSectores = new List<GenericBE>();
            lstMotPed = new List<GenericBE>();
            lstCondExp = new List<GenericBE>();
            lstGrpCond = new List<GenericBE>();
            lstBloEnt = new List<GenericBE>();
            lstBloFac = new List<GenericBE>();
            lstAsesores = new List<GenericBE>();
            lstTipoVisita = new List<GenericBE>();

            GenericBE objBlank = new GenericBE();
            objBlank.Codigo = string.Empty; 
            objBlank.Descripcion = string.Empty;

            GenericBE obj = null;
            try
            {
                //try
                //{
                //    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                //}
                //catch { }
                //RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_DATA_DDL");
                function.Invoke(dest);

                IRfcTable OFICINAS = function.GetTable("T_OFICINAS");
                IRfcTable ZCODES = function.GetTable("T_ZCODES");
                IRfcTable TIPODOC = function.GetTable("T_TIPODOC");
                IRfcTable GRPVEND = function.GetTable("T_GRPVEND");
                IRfcTable SECTORES = function.GetTable("T_SECTORES");
                IRfcTable MOTPED = function.GetTable("T_MOTPED");
                IRfcTable CONDEXP = function.GetTable("T_CONDEXP");
                IRfcTable GRPCOND = function.GetTable("T_GRPCOND");
                IRfcTable BLOENT = function.GetTable("T_BLOENT");
                IRfcTable BLOFAC = function.GetTable("T_BLOFAC");                
                IRfcTable ASESORES = function.GetTable("T_ASESORES");
                IRfcTable TIPOVISITA = function.GetTable("T_TIPOVISITA");
                //--- Oficina de ventas
                lstOfVtas.Add(objBlank);
                foreach (IRfcStructure item in OFICINAS)
                {
                    obj = new GenericBE();
                    obj.Codigo = item["VKBUR"].GetString();
                    obj.Descripcion = obj.Codigo + charSep + item["BEZEI"].GetString();
                    lstOfVtas.Add(obj);
                }
                //--- Zip Codes
                lstZipCodes.Add(objBlank);
                foreach (IRfcStructure item in ZCODES)
                {
                    obj = new GenericBE();

                    if (item["ZCODE"].GetString().Length > 10)
                    {
                        obj.Codigo = item["ZCODE"].GetString().Substring(0, 10);
                    }
                    else
                    {
                        obj.Codigo = item["ZCODE"].GetString();
                    }                        
                    obj.Descripcion = item["ZDESC"].GetString();
                    obj.TranspZone = item["TRANSPZONE"] == null ? "" : item["TRANSPZONE"].GetString();
                    lstZipCodes.Add(obj);
                }
                //--- Tipo / Clase de documento
                //lstTipoDoc.Add(objBlank);
                foreach (IRfcStructure item in TIPODOC)
                {
                    obj = new GenericBE();
                    obj.Codigo = item["AUART"].GetString();
                    obj.Descripcion = obj.Codigo + charSep + item["BEZEI"].GetString();
                    lstTipoDoc.Add(obj);
                }
                //--- Grupo de vendedores {Revisar si queda o se va}
                lstGrpVend.Add(objBlank);
                foreach (IRfcStructure item in GRPVEND)
                {
                    obj = new GenericBE();
                    obj.Codigo = item["VKGRP"].GetString();
                    obj.Descripcion = obj.Codigo + charSep + item["BEZEI"].GetString();
                    lstGrpVend.Add(obj);
                }
                //--- Sectores {Revisar si queda o se va}
                foreach (IRfcStructure item in SECTORES)
                {
                    obj = new GenericBE();
                    obj.Codigo = item["SPART"].GetString();
                    obj.Descripcion = obj.Codigo + charSep + item["VTEXT"].GetString();
                    lstSectores.Add(obj);
                }
                //--- Motivo de pedido
                lstMotPed.Add(objBlank);
                foreach (IRfcStructure item in MOTPED)
                {
                    obj = new GenericBE();
                    obj.Codigo = item["AUGRU"].GetString();
                    obj.Descripcion = obj.Codigo + charSep + item["BEZEI"].GetString();
                    lstMotPed.Add(obj);
                }
                ////--- Condición de expedición / prioridad de entrega
                lstCondExp.Add(objBlank);
                foreach (IRfcStructure item in CONDEXP)
                {
                    obj = new GenericBE();
                    obj.Codigo = item["VSBED"].GetString();
                    obj.Descripcion = obj.Codigo + charSep + item["VTEXT"].GetString();
                    lstCondExp.Add(obj);
                }
                //--- Grupo de condiciones:
                lstGrpCond.Add(objBlank);
                foreach (IRfcStructure item in GRPCOND)
                {
                    obj = new GenericBE();
                    obj.Codigo = item["KDKGR"].GetString();
                    obj.Descripcion = obj.Codigo + charSep + item["VTEXT"].GetString();
                    lstGrpCond.Add(obj);
                }
                //--- Bloqueos de entrega:
                lstBloEnt.Add(objBlank);
                foreach (IRfcStructure item in BLOENT)
                {
                    obj = new GenericBE();
                    obj.Codigo = item["LIFSP"].GetString();
                    obj.Descripcion = obj.Codigo + charSep + item["VTEXT"].GetString();
                    lstBloEnt.Add(obj);
                }
                //--- Bloqueos de factura:
                lstBloFac.Add(objBlank);
                foreach (IRfcStructure item in BLOFAC)
                {
                    obj = new GenericBE();
                    obj.Codigo = item["FAKSP"].GetString();
                    obj.Descripcion = obj.Codigo + charSep + item["VTEXT"].GetString();
                    lstBloFac.Add(obj);
                }
                //--- Lista de asesores comerciales:
                lstAsesores.Add(objBlank);
                foreach (IRfcStructure item in ASESORES)
                {
                    obj = new GenericBE();
                    obj.Codigo = item["PERNR"].GetString();
                    obj.Descripcion = item["ENAME"].GetString();
                    lstAsesores.Add(obj);
                }
                //--- Tipos de Visita                
                lstTipoVisita.Add(objBlank);
                foreach (IRfcStructure item in TIPOVISITA)
                {
                    obj = new GenericBE();
                    obj.Codigo = item["ID_ELEMENTO"].GetString();
                    obj.Descripcion = item["N_ELEMENTO"].GetString();
                    lstTipoVisita.Add(obj);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
        }

        public void get_Param_PFact(ref List<DECOR.BL.BE.GenericBE> lstDenom, ref List<DECOR.BL.BE.GenericBE> lstMoneda, 
            ref List<DECOR.BL.BE.GenericBE> lstMotivoBloq, ref List<DECOR.BL.BE.GenericBE> lstClaseDoc, 
            ref List<DECOR.BL.BE.GenericBE> lstRFACT, ref List<DECOR.BL.BE.GenericBE> lstSTATU, 
            ref List<DECOR.BL.BE.GenericBE> lstTFPLU, ref List<DECOR.BL.BE.GenericBE> lstCPag)
        {
            string charSep = ParametroDALC.getParamValueStatic("charSep");

            //------------------------------------------------------------------
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            DestConfig dc = new DestConfig();
            lstDenom = new List<GenericBE>();
            lstMoneda = new List<GenericBE>();
            lstMotivoBloq = new List<GenericBE>();
            lstClaseDoc = new List<GenericBE>();
            lstRFACT = new List<GenericBE>();
            lstSTATU = new List<GenericBE>();
            lstTFPLU = new List<GenericBE>();
            lstCPag = new List<GenericBE>();

            GenericBE blanco = new GenericBE();
            blanco.Codigo = " ";
            blanco.Descripcion = " ";
            
            GenericBE obj = null;
            try
            {
                //try
                //{
                //    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                //}
                //catch { }
                //RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_GET_PARAM_PFACT");
                function.Invoke(dest);

                IRfcTable T_RFACT = function.GetTable("T_RFACT");
                IRfcTable T_STATU = function.GetTable("T_STATU");
                IRfcTable T_TCURT = function.GetTable("T_TCURT");
                IRfcTable T_TFPLU = function.GetTable("T_TFPLU");
                IRfcTable T_TVFKT = function.GetTable("T_TVFKT");
                IRfcTable T_TVFST = function.GetTable("T_TVFST");
                IRfcTable T_TVTBT = function.GetTable("T_TVTBT");
                IRfcTable T_CPAG = function.GetTable("T_CPAG");

                lstRFACT.Add(blanco);
                foreach (IRfcStructure item in T_RFACT)
                {
                    obj = new GenericBE();
                    obj.Codigo = item["DOMVALUE_L"].GetString();
                    obj.Descripcion = item["DOMVALUE_L"].GetString() + charSep + item["DDTEXT"].GetString();
                    lstRFACT.Add(obj);
                }

                lstSTATU.Add(blanco);
                foreach (IRfcStructure item in T_STATU)
                {
                    obj = new GenericBE();
                    obj.Codigo = item["DOMVALUE_L"].GetString();
                    obj.Descripcion = item["DOMVALUE_L"].GetString() + charSep + item["DDTEXT"].GetString();
                    lstSTATU.Add(obj);
                }

                lstMoneda.Add(blanco);
                foreach (IRfcStructure item in T_TCURT)
                {
                    obj = new GenericBE();
                    obj.Codigo = item["WAERS"].GetString();
                    obj.Descripcion = item["WAERS"].GetString() + charSep + item["LTEXT"].GetString();
                    lstMoneda.Add(obj);
                }

                lstTFPLU.Add(blanco);
                foreach (IRfcStructure item in T_TFPLU)
                {
                    obj = new GenericBE();
                    obj.Codigo = item["FPTTP"].GetString();
                    obj.Descripcion = item["FPTTP"].GetString() + charSep + item["TTBEZ"].GetString();
                    lstTFPLU.Add(obj);
                }

                lstClaseDoc.Add(blanco);
                foreach (IRfcStructure item in T_TVFKT)
                {
                    obj = new GenericBE();
                    obj.Codigo = item["FKART"].GetString();
                    obj.Descripcion = item["FKART"].GetString() + charSep + item["VTEXT"].GetString();
                    lstClaseDoc.Add(obj);
                }

                lstMotivoBloq.Add(blanco);
                foreach (IRfcStructure item in T_TVFST)
                {
                    obj = new GenericBE();
                    obj.Codigo = item["FAKSP"].GetString();
                    obj.Descripcion = item["FAKSP"].GetString() + charSep + item["VTEXT"].GetString();
                    lstMotivoBloq.Add(obj);
                }

                lstDenom.Add(blanco);
                foreach (IRfcStructure item in T_TVTBT)
                {
                    if (item["TETBE"].GetString() == "Z001" || item["TETBE"].GetString() == "Z002")
                    {
                        obj = new GenericBE();
                        obj.Codigo = item["TETBE"].GetString();
                        obj.Descripcion = item["TETBE"].GetString() + charSep + item["TEBEZ"].GetString();
                        lstDenom.Add(obj);
                    }
                }

                lstCPag.Add(blanco);
                foreach (IRfcStructure item in T_CPAG)
                {
                    obj = new GenericBE();
                    obj.Codigo = item["ZTERM"].GetString();
                    obj.Descripcion = item["ZTERM"].GetString() + charSep + item["TEXT1"].GetString();
                    lstCPag.Add(obj);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
        }

        public int getDecimales()
        {
            return ParametroDALC.getDecimalesStatic;
        }

        public decimal getIGV()
        {
            throw new NotImplementedException();
        }

        public decimal getTipoCambio()
        {
            IRfcFunction function = null; RfcDestination dest = null;
            decimal ex_tipoCambio = 0m;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            DestConfig dc = new DestConfig();
            try
            {
                string pFecha = dateNetToSap(DateTime.Now);
                //try
                //{
                //    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                //}
                //catch { }
                //RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_TIPO_CAMBIO");
                function.SetValue("P_DATUM", pFecha);
                function.Invoke(dest);

                ex_tipoCambio = function.GetDecimal("P_TIPCAM");
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            
            return ex_tipoCambio;
        }

        public decimal getTipoCambio(DateTime pFecha)
        {
            IRfcFunction function = null; RfcDestination dest = null;
            //InMemoryDestinationConfiguration dc = new InMemoryDestinationConfiguration();
            decimal ex_tipoCambio = 0m;
            DestConfig dc = new DestConfig();
            try
            {
                //try
                //{
                //    RfcDestinationManager.RegisterDestinationConfiguration(dc);
                //}
                //catch { }
                //RfcDestination dest = RfcDestinationManager.GetDestination(this._connId);
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZWEB_TIPO_CAMBIO");
                function.SetValue("P_DATUM", dateNetToSap(pFecha));
                function.Invoke(dest);

                ex_tipoCambio = function.GetDecimal("P_TIPCAM");

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }
            
            return ex_tipoCambio;
        }

        public List<DECOR.BL.BE.GenericBE> getListaZipCode()
        {
            throw new NotImplementedException();
        }

        public DECOR.BL.BE.ClienteBE getClienteReniec(string pDNI)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Busca en el archivo de configuración el valor de un key
        /// </summary>
        /// <param name="key">Nombre de una entrada en el archivo de configuración</param>
        /// <returns>Valor asociado al key</returns>
        public string getParamValue(string key)
        {
            return getParamValueStatic(key);
        }

        public bool esTipoOferta(string pCodTipoDoc)
        {
            return esOferta(pCodTipoDoc);
        }

        /// <summary>
        /// Verifica que tipo de doc sea algun tipo de servicio
        /// </summary>
        /// <param name="pCodTipoDoc">Tipo de documento.</param>
        /// <returns>Devuelve true si es un servicio o false si no es servicio</returns>
        public bool esTipoServicio(string pCodTipoDoc)
        {
            return esPedidoServicio(pCodTipoDoc);
        }

        public bool esTipoPosCombo(string pCodTipoPos)
        {
            return esTipoPosComboStatic(pCodTipoPos);
        }

        public bool esTipoPosKit(string pCodTipoPos)
        {
            throw new NotImplementedException();
        }

        public bool esTipoCabCombo(string pCodTipoPos)
        {
            throw new NotImplementedException();
        }

        public bool esTipoCabKit(string pCodTipoPos)
        {
            return esTipoCabKitStatic(pCodTipoPos);
        }

        public bool esTipoSinLote(string pCodTipoDoc)
        {
            return esTipoSinLoteStatic(pCodTipoDoc);
        }

        public bool esTipoXY(string pCodigo, string pConfigKey)
        {
            return esTipoX(pCodigo, pConfigKey);
        }

        #endregion

        public static DateTime dateSapToNet(string pFechaSAP)
        {
            DateTime tmpVar = new DateTime();
            try
            {
                tmpVar = new DateTime(Convert.ToInt16(pFechaSAP.Substring(0, 4)), Convert.ToInt16(pFechaSAP.Substring(4, 2)), Convert.ToInt16(pFechaSAP.Substring(6, 2)));
            }
            catch { tmpVar = new DateTime(); }
            return tmpVar;
        }

        public static string dateNetToSap(DateTime pFechaNET)
        {
            try
            {
                return pFechaNET.Year.ToString().PadLeft(4, '0') + pFechaNET.Month.ToString().PadLeft(2, '0') + pFechaNET.Day.ToString().PadLeft(2, '0');
            }
            catch { return string.Empty; }
        }

        public static string getParamValueStatic(string key)
        {
            return ConfigurationManager.AppSettings[key];
        }


        /// <summary>
        /// Verifica que sea un tipo determinado.
        /// </summary>
        /// <param name="pCodigo">Valor que se pide verificar.</param>
        /// <param name="pConfigKey">Llave que es buscada en el archivo de configuración.</param>
        /// <returns>Devuelve true o false </returns> 
        public static bool esTipoX(string pCod, string pConfigKey)
        {
            string[] codTipoDoc = getParamValueStatic(pConfigKey).Split(',');
            foreach (string str in codTipoDoc)
            {
                if (pCod == str)
                {
                    return true;
                }
            }
            return false;
        }

        public static bool esOferta(string pCodTipoDoc)
        {
            string[] codServs = getParamValueStatic("CodOferta").Split(',');
            foreach (string str in codServs)
            {
                if (pCodTipoDoc == str)
                {
                    return true;
                }
            }
            return false;
        }

        public static bool esTipoPosComboStatic(string pCodTipoPos)
        {
            string[] codTipoPos = getParamValueStatic("TipoPosCombo").Split(',');
            foreach (string str in codTipoPos)
            {
                if (pCodTipoPos == str)
                {
                    return true;
                }
            }
            return false;
        }

        public static bool esTipoSinLoteStatic(string pCodTipoDoc)
        {
            string[] codTipoDoc = getParamValueStatic("CodSinLote").Split(',');
            foreach (string str in codTipoDoc)
            {
                if (pCodTipoDoc == str)
                {
                    return true;
                }
            }
            return false;
        }

        public static bool esTipoCabKitStatic(string pCodTipoPos)
        {
            string[] codTipoPos = getParamValueStatic("TipoCabKit").Split(',');
            foreach (string str in codTipoPos)
            {
                if (pCodTipoPos == str)
                {
                    return true;
                }
            }
            return false;
        }

        public static int getDecimalesStatic
        {
            get { return Convert.ToInt16(getParamValueStatic("Decimales")); }
        }

        public static bool esPedidoServicio(string pCodTipoDoc)
        {
            string[] codServs = getParamValueStatic("CodServicios").Split(',');
            foreach (string str in codServs)
            {
                if (pCodTipoDoc == str)
                {
                    return true;
                }
            }
            return false;
        }

        public static bool esTipoCabComboStatic(string pCodTipoPos)
        {
            string[] codTipoPos = getParamValueStatic("TipoCabCombo").Split(',');
            foreach (string str in codTipoPos)
            {
                if (pCodTipoPos == str)
                {
                    return true;
                }
            }
            return false;
        }

        #region IParametroDALC Members

        /// <summary>
        /// Recupera una lista de tipo de documentos
        /// </summary>
        /// <returns></returns>
        ///

        public List<GenericBE> getDocVtaCot()
        {
            IRfcFunction function = null; RfcDestination dest = null;
            DestConfig dc = new DestConfig();
            List<GenericBE> lstDocVtaCot = new List<GenericBE>();
            try
            {
                dest = DALC.getDestination(out dc);
                function = dest.Repository.CreateFunction("ZCM_SD_009");
                function.Invoke(dest);

                IRfcTable T_ZSD_CLVTA_COT = function.GetTable("T_ZSD_CLVTA_COT");
                GenericBE objTipDoc = null;
                foreach (IRfcStructure item in T_ZSD_CLVTA_COT)
                {
                    objTipDoc = new GenericBE();
                    objTipDoc.Codigo = item["ID"].GetString();
                    objTipDoc.Descripcion = item["CLVTA"].GetString();
                    lstDocVtaCot.Add(objTipDoc);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }

            return lstDocVtaCot;

        }

        public List<TipoDocumentoBE> getTipoDocumentos()
        {
            IRfcFunction function = null; RfcDestination dest = null;
            DestConfig dc = new DestConfig();
            List<TipoDocumentoBE>  lstTipoDocumento = new List<TipoDocumentoBE>();
            try
            {
                dest = DALC.getDestination(out dc);
                
                function = dest.Repository.CreateFunction("ZCM_SD_008");
                function.Invoke(dest);

                IRfcTable T_TIPODOC = function.GetTable("T_TIPODOC");
                TipoDocumentoBE objTipDoc = null;
                foreach (IRfcStructure item in T_TIPODOC)
                {
                    objTipDoc = new TipoDocumentoBE();
                    objTipDoc.Codigo = item["CODIGO"].GetString();
                    objTipDoc.Descripcion = item["CODIGO"].GetString() + " :: " + item["TEXTO"].GetString();
                    objTipDoc.Flag1 = item["FLAG1"].GetString();
                    objTipDoc.Flag2 = item["FLAG2"].GetString();
                    objTipDoc.Flag3 = item["FLAG3"].GetString();
                    objTipDoc.Flag4 = item["FLAG4"].GetString();
                    lstTipoDocumento.Add(objTipDoc);
                }
            }
            catch (Exception ex)
            {
                //throw ex;
            }
            finally
            {
                //RfcDestinationManager.UnregisterDestinationConfiguration(dc);
            }

            return lstTipoDocumento;
        }

        #endregion
    }
}
